package com.example.sqlitedemo.dao;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.example.sqlitedemo.greendao.DaoMaster;
import com.example.sqlitedemo.greendao.DaoSession;

import org.greenrobot.greendao.query.QueryBuilder;

public class DaoManager {
    private static final String DB_NAME = "hsc_db";//数据库名称
    private static DaoManager mDbManager;
    private DaoMaster mDaoMaster;
    private SQLiteDatabase db;
    private DaoSession sDaoSession;
    private static MyOpenHelper mDevOpenHelper;// 升级辅助

    /**
     * 构造方法
     * @param context 上下文
     */
    private DaoManager(Context context) {
        setDebug(false);
        // 初始化数据库信息
        getDaoMaster(context);
        getDaoSession();
    }

    /**
     * 单例模式
     * @param context
     * @return
     */
    public static DaoManager getInstance(Context context) {
        if (null == mDbManager) {
            synchronized (DaoManager.class) {
                if (null == mDbManager) {
                    mDbManager = new DaoManager(context);
                }
            }
        }
        return mDbManager;
    }


    /**
     * 获取可读数据库
     *
     * @param context
     * @return
     */
    public static SQLiteDatabase getReadableDatabase(Context context) {
        if (null == mDevOpenHelper) {
            getInstance(context);
        }
        return mDevOpenHelper.getReadableDatabase();
    }

    /**
     * 获取可写数据库
     *
     * @param context
     * @return
     */
    public static SQLiteDatabase getWritableDatabase(Context context) {
        if (null == mDevOpenHelper) {
            getInstance(context);
        }
        return mDevOpenHelper.getWritableDatabase();
    }

    /**
     * 获取DaoMaster
     * <p>
     * 判断是否存在数据库，如果没有则创建数据库
     *
     * @param context 上下文
     * @return 数据库操作类
     */
    public  DaoMaster getDaoMaster(Context context) {
        if (null == mDaoMaster) {
            synchronized (DaoManager.class) {
                if (null == mDaoMaster) {
                    mDevOpenHelper = new MyOpenHelper(context, DB_NAME, null);
                    mDaoMaster = new DaoMaster(mDevOpenHelper.getWritableDatabase());
                    db = mDevOpenHelper.getReadableDatabase();
                }
            }
        }
        return mDaoMaster;
    }

    /**
     * 完成对数据库的添加、删除、修改、查询操作，仅仅是一个接口
     *
     * @return
     */
    public DaoSession getDaoSession() {
        if (null == sDaoSession) {
            synchronized (DaoSession.class) {
                if (sDaoSession == null) {
                    sDaoSession = mDaoMaster.newSession();
                }
            }

        }
        return sDaoSession;
    }

    /**
     * 打开输出日志，默认关闭 isLogSql:true,开启日志显示，false：关闭日志显示
     */
    public void setDebug(boolean isLogSql) {
        QueryBuilder.LOG_SQL = isLogSql;
        QueryBuilder.LOG_VALUES = isLogSql;
    }

    /**
     * 关闭所有的操作，数据库开启后，使用完毕要关闭
     */
    public void closeConnection() {
//        closeHelper();
        closeDaoSession();
    }

    private void closeHelper() {
        if (mDevOpenHelper != null) {
            mDevOpenHelper.close();

        }
    }

    private void closeDaoSession() {
        if (sDaoSession != null) {
            sDaoSession.clear();
        }
    }


    /**
     * 关闭数据库
     * @return
     */
    public boolean isDbOpen(){
        return db.isOpen();
    }


}
